home *** CD-ROM | disk | FTP | other *** search
- /*
- File: ComparisonOperand.h
-
- Contains: xxx put contents here xxx
-
- Written by: Andy Nicholas, Greg Anderson, Chris Bingham, John Rohrlich, Max McFarland, Paul Ossenbruggen, Mike Kobb
-
- Copyright: © 1995 by Apple Computer, Inc., all rights reserved.
-
- <3> 9/26/95 pco
-
- */
-
-
- #ifndef __COMPARISONOPERAND__
- #define __COMPARISONOPERAND__
-
- //
- // For declaration of TDescriptor
- //
- #include "MoreAEM.h"
-
- class TAbstractScriptableObject;
- class TAbstractObjectSpecifier;
- class TAETransaction;
-
- enum ComparitorType
- {
- kAbstractComparitor = 0,
- kLiteralComparitor,
- kSimplePropertyComparitor,
- kCompoundPropertyComparitor
- };
-
- //========================================================================================
- // CLASS TComparisonOperand
- //
- // Can be either literal data or an object specifier;
- // if it is an object specifier, then it can either be
- // a complete specifier (root object is the null container)
- // or it can be a specifier relative to the object being
- // examined (in a whose clause resolution).
- //========================================================================================
-
- class TComparisonOperand
- {
- public:
- TComparisonOperand();
- virtual ~TComparisonOperand();
-
- //
- // A comparison operand knows what the best type of
- // data is for it to return, should it be compared
- // with some other operand, and it also knows what
- // data types it can return. Of course it must be
- // able to return said data.
- //
- virtual DescType BestType(const TAETransaction& t, TAbstractScriptableObject* objectBeingExamined = nil) const = 0;
- virtual Boolean CanReturnDataOfType(const TAETransaction& t, DescType desiredType, TAbstractScriptableObject* objectBeingExamined = nil) const = 0;
- virtual TDescriptor GetData(const TAETransaction& t, DescType requestedType, TAbstractScriptableObject* objectBeingExamined = nil) const = 0;
-
- //
- // A comparison operand may return either a reference
- // to its data, or a copy of said data. Only the
- // comparison operand knows for sure, so call DisposeOperandData
- // when done with the operand's data.
- //
- virtual void DisposeOperandData(TDescriptor operandData) const;
-
- //
- // Compare two operands:
- //
- virtual Boolean Compare(const TAETransaction& t, DescType comparisonOperator, const TComparisonOperand& compareWith, TAbstractScriptableObject* objectBeingExamined = nil) const;
- virtual Boolean Compare(const TAETransaction& t, DescType comparisonOperator, const DescType dataTypeToUse, TDescriptor otherOperandData, TAbstractScriptableObject* objectBeingExamined = nil) const;
-
- //
- // Describe the data that is being compared
- //
- virtual TDescriptor SpecifierForOperand() = 0;
- virtual ComparitorType ComparisonOperandType() const;
- virtual DescType PropertyToCompare() const;
- };
-
- //========================================================================================
- // CLASS TConstantComparisonOperand
- //========================================================================================
-
- class TConstantComparisonOperand : public TComparisonOperand
- {
- private:
- TDescriptor fConstantData;
- Boolean fDataOwned;
-
- public:
- TConstantComparisonOperand(TDescriptor constantData, Boolean passOwnershipOfData = true);
- ~TConstantComparisonOperand();
-
- virtual DescType BestType(const TAETransaction& t, TAbstractScriptableObject* objectBeingExamined = nil) const;
- virtual Boolean CanReturnDataOfType(const TAETransaction& t, DescType desiredType, TAbstractScriptableObject* objectBeingExamined = nil) const;
- virtual TDescriptor GetData(const TAETransaction& t, DescType requestedType, TAbstractScriptableObject* objectBeingExamined = nil) const;
- virtual TDescriptor SpecifierForOperand();
- virtual ComparitorType ComparisonOperandType() const;
- };
-
- //========================================================================================
- // CLASS TPropertyComparisonOperand
- //========================================================================================
-
- class TPropertyComparisonOperand : public TComparisonOperand
- {
- private:
- DescType fPropertyToCompare;
- TAbstractObjectSpecifier* fRelativeSpecifier;
- Boolean fIsRelativeToObjectBeingExamined;
-
- TDescriptor fCachedData;
- DescType fCachedType;
- TAbstractScriptableObject* fObjectBeingExaminedForDataCache;
-
- TAbstractScriptableObject* fCachedResolvedObject;
- TAbstractScriptableObject* fObjectBeingExaminedForResolveCache;
-
- public:
- TPropertyComparisonOperand(DescType propertyToCompare, TAbstractObjectSpecifier* relativeSpecifier, Boolean fIsRelativeToObjectBeingExamined);
- virtual ~TPropertyComparisonOperand();
-
- TAbstractScriptableObject* ResolveObjectBeingExamined(const TAETransaction& t, TAbstractScriptableObject* objectBeingExamined) const;
-
- virtual DescType BestType(const TAETransaction& t, TAbstractScriptableObject* objectBeingExamined = nil) const;
- virtual Boolean CanReturnDataOfType(const TAETransaction& t, DescType desiredType, TAbstractScriptableObject* objectBeingExamined = nil) const;
- virtual TDescriptor GetData(const TAETransaction& t, DescType requestedType, TAbstractScriptableObject* objectBeingExamined = nil) const;
- virtual Boolean Compare(const TAETransaction& t, DescType comparisonOperator, const DescType dataTypeToUse, TDescriptor otherOperandData, TAbstractScriptableObject* objectBeingExamined = nil) const;
- virtual TDescriptor SpecifierForOperand();
- virtual ComparitorType ComparisonOperandType() const;
- virtual DescType PropertyToCompare() const;
- };
-
-
- #endif
-